import os
import sys
import json
import time

# 添加项目根目录到Python路径
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))

from models import VideoDisposeModel, record_manager


def main():
    """
    VideoDisposeModel使用示例
    
    本示例展示了如何使用VideoDisposeModel类来创建、更新和管理视频处理任务。
    包括创建任务、更新状态、设置请求和响应数据等操作。
    """
    print("=== VideoDisposeModel使用示例 ===")
    
    # 示例1: 创建一个新的视频处理任务
    print("\n1. 创建新的视频处理任务:")
    # 准备请求数据
    request_data = {
        "video_paths": [
            "https://example.com/video1.mp4",
            "https://example.com/video2.mp4"
        ],
        "process_func": "enhanced_concat_processor",
        "target_duration": 60,
        "maintain_aspect_ratio": True,
        "target_size": [1920, 1080]
    }
    
    # 使用record_manager创建任务
    task = record_manager.create_task(request_data)
    print(f"创建的任务信息:")
    print(f"  任务ID: {task.task_id}")
    print(f"  任务状态: {task.status}")
    print(f"  创建时间: {time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(task.created_at))}")
    print(f"  请求数据: {task.get_request_data()}")
    
    # 示例2: 更新任务状态
    print("\n2. 更新任务状态为处理中:")
    task.update_status(VideoDisposeModel.Status.PROCESSING)
    print(f"更新后的任务状态: {task.status}")
    print(f"更新时间: {time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(task.updated_at))}")
    
    # 示例3: 设置响应数据
    print("\n3. 设置任务响应数据:")
    # 准备响应数据
    response_data = {
        "output_path": "output/video_result.mp4",
        "video_info": {
            "duration": 58.5,
            "size": [1920, 1080],
            "fps": 30.0,
            "file_size": 52428800
        },
        "success": True,
        "message": "视频处理成功"
    }
    
    task.set_response_data(response_data)
    print(f"设置的响应数据: {task.get_response_data()}")
    
    # 示例4: 完成任务
    print("\n4. 将任务标记为完成:")
    task.update_status(VideoDisposeModel.Status.COMPLETED)
    print(f"任务状态: {task.status}")
    print(f"完成时间: {time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(task.updated_at))}")
    
    # 示例5: 任务序列化
    print("\n5. 任务序列化:")
    # 转换为字典
    task_dict = task.to_dict()
    print(f"任务字典表示:")
    for key, value in task_dict.items():
        # 格式化时间戳显示
        if key == 'created_at' or key == 'updated_at':
            print(f"  {key}: {value} ({time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(value))})")
        else:
            print(f"  {key}: {value}")
    
    # 转换为JSON字符串
    task_json = task.to_json()
    print(f"\n任务JSON表示: {task_json}")
    
    # 示例6: 从序列化数据恢复任务
    print("\n6. 从JSON恢复任务:")
    restored_task = VideoDisposeModel.from_json(task_json)
    print(f"恢复的任务ID: {restored_task.task_id}")
    print(f"恢复的任务状态: {restored_task.status}")
    print(f"恢复的响应数据: {restored_task.get_response_data()}")
    
    # 示例7: 使用模型管理器管理多个任务
    print("\n7. 管理多个任务:")
    # 创建另一个任务
    another_request_data = {
        "video_paths": ["https://example.com/video3.mp4"],
        "process_func": "get_video_info"
    }
    another_task = record_manager.create_task(another_request_data)
    
    # 列出所有任务
    all_tasks = record_manager.list_tasks()
    print(f"总任务数: {len(all_tasks)}")
    
    # 根据状态过滤任务
    pending_tasks = record_manager.list_tasks(status=VideoDisposeModel.Status.PENDING)
    print(f"待处理任务数: {len(pending_tasks)}")
    
    completed_tasks = record_manager.list_tasks(status=VideoDisposeModel.Status.COMPLETED)
    print(f"已完成任务数: {len(completed_tasks)}")
    
    # 根据任务ID获取任务
    retrieved_task = record_manager.get_task(task.task_id)
    print(f"通过ID检索的任务状态: {retrieved_task.status}")
    
    # 删除任务
    deleted = record_manager.delete_task(another_task.task_id)
    print(f"删除第二个任务: {'成功' if deleted else '失败'}")
    print(f"删除后任务数: {len(record_manager.list_tasks())}")
    
    # 示例8: 处理失败的任务
    print("\n8. 处理失败的任务:")
    error_task = record_manager.create_task({"video_paths": ["https://example.com/invalid.mp4"]})
    error_task.update_status(VideoDisposeModel.Status.PROCESSING)
    
    # 设置错误信息（存储在response中，符合表结构）
    error_response = {
        "success": False,
        "message": "无法下载视频文件: 连接超时",
        "error_code": "DOWNLOAD_TIMEOUT"
    }
    error_task.set_response_data(error_response)
    error_task.update_status(VideoDisposeModel.Status.FAILED)
    
    print(f"失败任务信息:")
    print(f"  任务ID: {error_task.task_id}")
    print(f"  状态: {error_task.status}")
    print(f"  响应数据: {error_task.get_response_data()}")
    print(f"  更新时间: {time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(error_task.updated_at))}")
    
    print("\n=== 示例完成 ===")


if __name__ == "__main__":
    main()